'''
Python sklearn学习之缺失值插补

scikit-learn要求数据没有缺失值
在插补过程中，
1.若只使用缺失特征维度中非缺失值来插补该特征维度下的缺失值的插补算法，则称之为单变量算法；
2.若使用整个可用特征维度来估计缺失的值的插补算法则称之为多变量算法
'''

# 1. 单变量
'''
sklearn提供了单变量插补的工具类SimpleImputer，其提供了计算缺失值的基本策略。缺失值可以用提供的常数值计算，也可以使用缺失值所在的行/列中的统计数据(平均值、中位数或者众数)来计算。这个类也支持不同的缺失值编码。
'''

from sklearn.impute import SimpleImputer
import numpy as np
import pandas as pd
#

imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit([[1, 2], [np.nan, 3], [7, 6]])
X = [[np.nan, 2], [6, np.nan], [7, 6]]
print(imputer.transform(X))


df = pd.DataFrame([["a", "x"], [np.nan, "y"], ["a", np.nan], ["b", "y"]], dtype="category")
imp = SimpleImputer(strategy="most_frequent")
print(imp.fit_transform(df))


# 2 多变量插补
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

imp = IterativeImputer(max_iter=10, random_state=0)
imp.fit([[1, 2], [3, 6], [4, 8], [np.nan, 3], [7, np.nan]])
X_test = [[np.nan, 2], [6, np.nan], [np.nan, 6]]
np.round(imp.transform(X_test))


#  ok for interpolation:
import numpy as np
from sklearn.impute import SimpleImputer

data_V10004_701 = np.array([])

imputation_transformer = SimpleImputer(np.nan, "mean")

data_V10004_701 = data_V10004_701.reshape(-1, 1)
data_V10004_701_fited = imputation_transformer.fit_transform(data_V10004_701)
